<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Set集合数据类型</title>
</head>
<body>
  
</body>

<script type="text/javascript">
  // 集合：表示无重复值的有序列表
  let set = new Set()
  console.log(set);

  // 添加元素
  set.add(2)
  set.add('4')
  set.add('4')
  set.add([6, 8, 10])
  console.log(set)

  // 校验集合中是否有某个元素
  console.log(set.has(2))

  // 删除元素
  set.delete(2)
  console.log(set)

  // 获取元素个数
  console.log(set.size)

  // 循环set集合
  set.forEach((key, val) => console.log(key))

  // set集合转数组
  let arr = [...set]
  console.log('arr', arr)
  console.log(arr[0])


  // set中对象的引用无法被释放
  let set3 = new Set(), obj = {}
  set3.add(obj)
  // 释放当前的资源
  obj = null
  console.log(set3)

  // WeakSet弱引用释放资源
  let set4 = new WeakSet, obj2 = {}
  set4.add(obj2)
  obj2 = null
  console.log(set4)

  // WeakSet特点：
  // 1、不能换入非对象类型的参数
  // 2、不可迭代
  // 3、没有foreach()
  // 4、没有size属性

</script>
</html>